// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.x52im.rbchat.logic.chat_root.targetchoose;

import android.app.Activity;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import com.eva.android.widget.alert.AlertDialog;
import com.eva.epc.common.util.CommonUtils;
import com.x52im.rainbowchat.im.dto.ChatType;
import com.x52im.rbchat.R;
import com.x52im.rainbowchat.http.logic.dto.GroupEntity;
import com.x52im.rbchat.logic.chat_friend.utils.MessageHelper;
import com.x52im.rbchat.logic.chat_group.utils.GMessageHelper;
import com.x52im.rbchat.logic.chat_guest.utils.TMessageHelper;

import java.util.Observer;

/**
 * 从 {@link TargetChooseActivity} 界面选择好目标后的确认界面(跟微信一样的)。
 *
 * @author JackJiang
 * @since 6.0
 */
public abstract class TargetChooseResultConfirm {

    /**
     * 构造方法。
     *
     * @param parentActivity 父activity
     * @param toName 名片发送目标的昵称（可能是个人昵称，也可能是群组名）
     * @param toId 名片发送目标的id（可能是个人uid，也可能是群组id）
     * @param selectedCard 被发送者的名片信息
     */
    public TargetChooseResultConfirm(Activity parentActivity, String title, String toName, String toId, String targetResultDesc) {
        //**---- 编辑界面的UI初始化
        LayoutInflater inflater = parentActivity.getLayoutInflater();
        final View layout = inflater.inflate(R.layout.target_choose_confirm_form, parentActivity.findViewById(R.id.target_choose_confirm_form_LL));
        TextView titleView = layout.findViewById(R.id.target_choose_confirm_form_titleView);
        ImageView toImageView = layout.findViewById(R.id.target_choose_confirm_form_toImageView);
        TextView toNameView = layout.findViewById(R.id.target_choose_confirm_form_toNameView);
        TextView toIdView = layout.findViewById(R.id.target_choose_confirm_form_toIdView);
        TextView contactNickName = layout.findViewById(R.id.target_choose_confirm_form_contactNickNameView);
        final EditText toSay = layout.findViewById(R.id.target_choose_confirm_form_toSayEdit);

        if(title != null) {
            titleView.setText(title);
        }

        // 名片发送目标的头像（可能是个人头像，也可能是群组头像）
        loadHeadIcon(toImageView);
        // 名片发送目标的昵称（可能是个人昵称，也可能是群组名）
        toNameView.setText(toName);
        // 名片发送目标的id（可能是个人uid，也可能是群组id）
        toIdView.setText("ID: " + (GroupEntity.isWorldChat(toId)?"世界频道无ID": toId));

        // 被发送者的昵称
        contactNickName.setText(targetResultDesc);//selectedCard.getNickName());

        //**---- ok按钮的点击事件
        DialogInterface.OnClickListener okListener = (dialog, which) -> {
            String toSayContent = toSay.getText().toString();
            //** 真正发出"名片"消息
            doClickOK(toSayContent);
            //** 最后做出相应的UI复位工作
            afterClickOK(toSay);
        };

        //**---- cancel按钮的点击事件
        DialogInterface.OnClickListener cancelListener = (dialog, which) -> doClickCancel(toSay);

        //**---- 在AlertView中显示编辑界面
        new AlertDialog.Builder(parentActivity)
                .setTitle(null)
                .setView(layout)
                .setPositiveButton("发送", okListener)
                .setNegativeButton(parentActivity.getResources().getString(R.string.general_cancel), cancelListener)
                .show()
                .setCanceledOnTouchOutside(false);
    }

    protected Observer createToSayObserver(final Activity parentActivity, final int chatType, final String finalToId, final String finalToName, final String toSayContent){
        return (observable, data1) -> {
            //** 尝试发出附带的"留言"消息
            toSay(parentActivity, chatType, finalToId, finalToName, toSayContent);
        };
    }

    /**
     * 尝试发出附带的"留言"消息。
     *
     * @param parentActivity
     * @param chatType
     * @param finalToId
     * @param finalToName
     * @param toSayContent
     */
    protected void toSay(final Activity parentActivity, final int chatType, final String finalToId, final String finalToName, final String toSayContent) {
        if(!CommonUtils.isStringEmpty(toSayContent, true)) {
            if(chatType == ChatType.CHAT_TYPE_FREIDN$CHAT)
                MessageHelper.sendPlainTextMessageAsync(parentActivity, finalToId, toSayContent, null);
            else if(chatType == ChatType.CHAT_TYPE_GUEST$CHAT)
                TMessageHelper.sendPlainTextMessageAsync(parentActivity, finalToId, finalToName, toSayContent, null);
            else if(chatType == ChatType.CHAT_TYPE_GROUP$CHAT)
                GMessageHelper.sendPlainTextMessageAsync(parentActivity, finalToId, toSayContent, null);
        }
    }

    /**
     * 显示被发送者的头像（由子类实现）。
     *
     * @param toImageView 头像显示组件
     */
    protected abstract void loadHeadIcon(ImageView toImageView);

    /**
     * 当点击"确认"按钮时，要做的事（由子类实现）。
     *
     * @param toSayContent 额外要发送的文本消息
     */
    protected abstract void doClickOK(String toSayContent);

    /**
     * 当点击"确认"按钮完成后，要做的事（由子类实现）。
     *
     * @param toSay 文本消息输入框
     */
    protected abstract void afterClickOK(EditText toSay);

    /**
     * 当点击"取消"按钮完成后，要做的事（由子类实现）。
     *
     * @param toSay 文本消息输入框
     */
    protected abstract void doClickCancel(EditText toSay);
}
